iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
1

2022 Medium 新版傳送門

API Server ( 導論 )

API

API 的英文全名為 Application Programming Interface,
翻成中文是應用程式介面。
好,我知道這應該根本不算翻成中文XDDD
我的繁體白話翻譯為『資料交換介面』。

在程式的世界中,不是所有的東西只能自己幹,
有時候我們會需要和別人的程式做交流,取得資料,
像是昨天我們有提到的 Google Map API ,
我們不可能老闆說想要在網站加個地圖功能,然後自己幹個半年,
那可能半個禮拜就被老闆幹到飛天。
地表最強的 Google Map 就有開出很簡單的『資料交換介面』( API ),
API 長得就像一串網址,像是這樣:

https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap

這串網址包含兩個資料,一個欄位名稱是 Key ,另一個是 callback ,
而 key 後的 YOUR_API_KEY,就是我們需要提供給 Google Map 的資料,
給 Google Map 資料後,Google Map 就會傳遞給我們大量的資料,
幫我們繪出地圖、座標、比例尺等等一堆自己弄一輩子弄不出來的東西。

對於 API 有簡單的概念後,筆者要來說明,
為什麼 API 對後端工程師怎麼重要。
現代化的網頁開發,喜歡做到『前後端分離』,
因為前後端分離可以幫助軟體工程分工明細化,
針對頁面設計、使用者體驗動態處理,可以請前端工程師團隊處理,
而頁面資料來源、資料庫管理、server 調校等等『看不到的問題』,
就讓後端工程師團隊解決,充分達到分工合作的效果,
因此前端需要後端,建立『API』位址,
並給予特定搜尋字串或條件後,回傳所需要的資料。

例如,當使用者在玩英雄聯盟時,
打開裝備區塊,前端會先傳遞『玩家的角色種類』和『玩家的徧好設定』到後端,
而可能到後端的位址長這樣 : www.lolweb.com/getEquipment?role=KMT&prefer=none
因此,前端給了後端兩個資料: 角色 -> KMT,偏好 -> none。
後端就會根據這些資料,回傳藍色的裝備(誤..,以及系統預設的裝備列表資料。
因此一個看似簡單的網站,可能有好幾隻 API 在不同頁面不停地交換資料,
所以在現代 Web 開發中,API 是不得不學會的技能了。

HTTP Method

沒錯各位看倌,我們又提到了 HTTP 這個東西,
因為在建立資料傳遞的機制時,我們一定要學會最基本的兩種傳遞方式,
一種叫做『GET』,另外一種叫做『POST』。
他們就是一種 『HTTP Method』的傳遞方式,
在跟後端 API 做資料交換時,最常使用這兩種方式傳遞資料,
當然也有其他會被用的,例如 Delete, Put 等等....
但我們今天就先專心討論最常被使用到的這哼哈二將。

GET

GET 的資料傳遞方式就如同筆者提到的 API ,
會直接將資料寫在網址上,
因此使用者和開發者可以很方便的,直接更改網址變數去取得結果 / 除錯,
這種傳遞方式最常被用來『取得資料』,
就像 Google Map API 做的,給定幾個參數後,取得大量的資料,
而且雖然能傳遞的資料大小有限( 255 字元),但傳遞速度極快,
可是相對的,他會有可怕的資安風險。
筆者幾年前有碰過一個學校的後台網站,
該網站直接把學生學號參數寫在網址列上,
因此我改了一下學號,就可以看到別人的個資(汗.....
所以在開發時,一定要注意這個連君子都防不太了的風險@@

Post

POST 的資料傳遞方式比較安全,
他會把資料給『隱藏』起來,
但當然,這是對於使用者來說隱藏起來,
不過如果使用偵錯工具,檢查網路,還是會看到資料。
而這個方法最常被用來『新增資料』,
例如在逛 PTT 時新增一個噓文,
或是滑臉書時,點擊一個讚,
都是送出一筆資料,新增進後端的資料庫內。
由於新增資料的特性,POST 方法可以塞非常多的資料,
傳輸量可以達到 2MB 的規模,
不要小看 2MB ,2MB 可以說是將近 250000 個字的大小呢 !!
但相對的,傳輸的速度會比較慢一些。

想看更詳細的 HTTP Method,可以參考此文章

如果有任何問題,或是指證文中的錯誤,歡迎寄信給我或留言在下面喔~


上一篇
[Day7] 基本資料格式: XML 和 JSON
下一篇
[Day9] API Server ( 實務 )
系列文
菜鳥後端工程師的第一門課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言